package main

import "fmt"

/**
字符类型(char)
	Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存

	字符串就是一串固定长度的字符连接起来的字符序列.Go的字符串是由单个字节连接起来的.
	也就是说对于传统的字符串是由字符组成的,而Go的字符串不同,它是由字节组成的.

	[官方将string归属到基本数据类型, https://tour.go-zh.org/basics/11 ]

	1)如果保存的字符在ASCII表的,比如[0-1 a-z A-Z] 直接可以保存到byte
	2)如果保存的字符对应码值大于255,可以考虑用int类型保存
	3)如果需要按照字符的方式输出, 需要格式化 %c

使用细节:
	1)字符常量是用单引号''括起来的单个字符, 如 var c1 byte='a'
	2)Go中允许使用转义字符 \ 来将其后的字符转变位特殊字符型常量,如 var c3 char =\n // \n表示换行符
	3)Go语言的字符使用UTF-8编码 英文字母1个字节  汉字3个字节
	4)在Go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值.
	5)可以给某个变量一个数字,然后按格式化输出时%c,会输出该数字对应的unicode字符
	6)字符类型时可以进行运算的,相当于一个整数,因为它都对应有Unicode码.

字符类型本质
	1)字符型 存到计算机中,需要将字符对应的码值(整数)找出来
      存储,字符--->对应码值--->二进制--->存储
	2)字符和码值的对应关系是通过字符编码表决定的(是规定好的)
	3)Go语言的编码都统一成了utf-8,非常的方便、统一,在也没有乱码的困扰了.
 */

func main() {
	var c1 byte='a'
	var c2 byte='0'

	// 当输出byte值,就是输出了对应字符的byte的值
	fmt.Println("c1=",c1,"c2=",c2)

	// 如果我们希望输出对应字符,需要使用格式化输出
	fmt.Printf("c1=%c c2=%c \n",c1,c2)

	var c3 int='北'
	fmt.Printf("c3=%c \n",c3)

	var c4 int=22269
	fmt.Printf("c4=%c \n",c4)

	//字符类型时可以进行运算的,相当于一个整数,运输时时按照码值运行
	var n1=10+'a' //10 + 97=107
	fmt.Println("n1=",n1)


}